import eneSta
import asses


def find_index(cMap, i, j, isEne):
    '''
    查询坐标i,j下棋子在chess_list中的下标
    :param cMap:
    :param i:
    :param j:
    :param isEne:
    :return:
    '''
    index = -1
    if isEne:
        if (i, j) in cMap.ene_chess_list:
            index = cMap.ene_chess_list.index((i, j))
    else:
        if (i, j) in cMap.my_chess_list:
            index = cMap.my_chess_list.index((i, j))
    return index

def simMove(cMap, x1, y1, x2, y2, isEne):
    """

    :param cMap: 传入当前棋盘的状态
    :param x1: 棋子起始行动坐标（第二个维度）
    :param y1: 棋子起始行动坐标（第一个维度）
    :param x2: 棋子目标坐标
    :param y2: 棋子目标坐标
    :param isEne: 是否为敌方行动
    :return:修改后的cMap 注意修改ene_chess_list my_chess_list里面对应的棋子坐标
            没有碰子返回FALSE 有碰子返回True
    """
    # 传入的x, y 在cMap中的引用方式为：cMap.map[x, y]
    index = -1
    if isEne:
        if (x1, y1) in cMap.ene_chess_list:
            index = cMap.ene_chess_list.index((x1, y1))
    else:
        if (x1, y1) in cMap.my_chess_list:
            index = cMap.my_chess_list.index((x1, y1))
    # print(index)
    if cMap.map[x2, y2] == 0:
        #  没有碰子
        if isEne:
            # 敌方移动
            enemyChess = cMap.ene_map[cMap.map[x1, y1]]
            cMap.ene_chess_list[index] = (x2, y2)  # 改变棋子对应位置
            # print(cMap.ene_chess_list)
        else:
            cMap.my_chess_list[index] = (x2, y2)  # 改变棋子对应位置
            # print(cMap.my_chess_list)
        cMap.map[x2, y2] = cMap.map[x1, y1]
        cMap.map[x1, y1] = 0
        return cMap, False  # 没有碰子返回False
    else:
        if not isEne:
            result = asses.ChessComparisons(cMap.map[x1, y1], cMap.map[x2, y2], cMap)
        else:
            result = asses.ChessComparisons(cMap.map[x2, y2], cMap.map[x1, y1], cMap)
        # print(result)
        if result == 0:  # 实际的敌方胜
            # print('result = 0')
            if isEne:
                # 敌方行动 敌方行动到[x2, y2]位置 删除我方在[x2, y2]的棋子 同时删除cMap.my_chess_list中(x2, y2)的棋子
                # enemyChess = cMap.ene_map[cMap.map[x1, y1]]
                # posList[enemyChess] = [y2, x2]
                cMap.map[x2, y2] = cMap.map[x1, y1]
                cMap.map[x1, y1] = 0
                index = find_index(cMap, x2, y2, False)  # 删除我方棋子
                if index != -1:
                    cMap.my_chess_list.pop(index)
                index = find_index(cMap, x1, y1, True)  # 改变敌方棋子在ene_chess_list中的坐标
                if index != -1:
                    cMap.ene_chess_list[index] = (x2, y2)
            else:
                # 我方行动 敌方胜 敌方棋子不动 删除我方在(x1, y1)中的棋子
                cMap.map[x1, y1] = 0
                index = find_index(cMap, x1, y1, False)  # 删除我方棋子
                if index != -1:
                    cMap.my_chess_list.pop(index)

        elif result == 1:  # 实际的我方胜
            if not isEne:  # 我方行动 我方胜 x1, y1前进到x2, y2的位置
                #  删除敌方在x2, y2的棋子 将我方棋子从x1, y1改为x2, y2
                # enemyChess = cMap.ene_map[cMap.map[x1, y1]]
                # eneSta.setDie(enemyChess, posList)
                cMap.map[x2, y2] = cMap.map[x1, y1]
                cMap.map[x1, y1] = 0
                index = find_index(cMap, x1, y1, False)  # 我方棋子坐标从x1, y1 改为x2，y2
                if index != -1:
                    cMap.my_chess_list[index] = (x2, y2)
                index = find_index(cMap, x2, y2, True)  # 删除敌方棋子在x2, y2的坐标
                if index != -1:
                    cMap.ene_chess_list.pop(index)

            else:  # 敌方前进 我方胜 老位置是实际的敌方，前进失败
                # 删除敌方在x1, y1的棋子 我方棋子不动
                cMap.map[x1, y1] = 0
                index = find_index(cMap, x1, y1, True)  # 删除敌方棋子在ene_chess_list
                if index != -1:
                    cMap.ene_chess_list.pop(index)

        elif result == 2:  # 对死

            if isEne:
                # 敌方行动 删除敌方在x1, y1的棋子 删除我方在x2, y2的棋子
                index = find_index(cMap, x1, y1, True)  # 改变敌方棋子在ene_chess_list中的坐标
                if index != -1:
                    cMap.ene_chess_list.pop(index)
                index = find_index(cMap, x2, y2, False)  # 删除我方棋子
                if index != -1:
                    cMap.my_chess_list.pop(index)

            else:
                # 敌方行动 删除我方在x1, y1的棋子 删除敌方在x2, y2的棋子
                index = find_index(cMap, x2, y2, True)  # 改变敌方棋子在ene_chess_list中的坐标
                if index != -1:
                    cMap.ene_chess_list.pop(index)
                index = find_index(cMap, x1, y1, False)  # 删除我方棋子
                if index != -1:
                    cMap.my_chess_list.pop(index)
            cMap.map[x2, y2] = 0
            cMap.map[x1, y1] = 0
        return cMap, True
